package com.springcloud3.stream;
//StreamApi
//声明式处理集合数据,包含:筛选,转换,组合等

import io.swagger.v3.oas.models.security.SecurityScheme;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;

/**
 * ~~~~~~~~~~~~~~创建流
 * filter map flatMap 中间操作
 * ~~~~~~~~~~~新流
 * count max  终止超作
 *    ~~~~~~~  结果
 */
public class Test2 {
public static void main(String[] args) {

List<Integer> list = List.of(2,4,6,7,8,9);
//流特性
    //1.流是惰性;只有在启动最终操作才会对数据进行计算
    //而且值在需要时才会消耗源数据
//Stram Api
    //1.把数据封装成流,要数据量
    //2.定义流式操作
    //3,获取最终结果
 list.stream().
         filter(els-> {
return els % 2 == 0;

         })   //过滤我们想要的
         //terminal operation  终止操作
         .max(Integer::compareTo)
         .ifPresent(System.out::println);
//流的三大步骤
 //1.数据流 2, N个中间操作 3.一个终止操作

    //1.数据流
    //1.创建流
    Stream<Integer> stream = Stream.of(1,2,3);
     Stream<Integer> concat = Stream.concat(Stream.of(4,5,6),stream);
    Stream<Object> build =Stream.builder().add("6").add("7").add("8").build();
//2).从集合中获取这个流List,Set,Map
   List<Integer>integers= List.of(1,2,3,4,5);
   Stream<Integer>stream1=    integers.stream();

   Set<Integer> integerSet= Set.of((int) 2.3);
   integerSet.stream();

   Map<Object,Object>of= Map.of();
   of.keySet().stream();
   of.values().stream();
   //2.默认是不并发的,也可以并发
    //并发以后自己解决线程安全问题
    //有状态数据将产生线程安全问题
    //流的所有操作都是无状态数据,数据状态仅在次有效,不溢出至函数外
long count=     Stream.of(1,2,4,6).
        parallel()//并发操作
        .filter(els->els > 2).
        count();//结束操作



}
}
